#include "ConfigFile.h"

void trim_string( char* str )
{
	if(str == NULL)
		return ;
	char tmp[2048] = {0};
	memcpy(tmp, str, strlen(str) );

	int index=0;
	for(int tmpindex=0; tmpindex< strlen(str); tmpindex++)
	{
		if(tmp[tmpindex]!=' '&&tmp[tmpindex]!='\t'&&tmp[tmpindex]!='\n')
		{
			str[index]=tmp[tmpindex];
			index++;
		}
	}
	str[index] = '\0';

	while( str[strlen(str)-1] == ';' )
		str[strlen(str)-1] = '\0';
	
}

GConfigFile::GConfigFile( const string& strFile )
{
	m_strFile = strFile;
}

string GConfigFile::get_string_param( const string& strKey, const string& defaultValue )
{
	string strValue = get_param( strKey );
	if( strValue.empty() )
	{
		return defaultValue;
	}

	return strValue;
}

double GConfigFile::get_double_param( const string& strKey, int defaultValue )
{
	string strValue = get_param( strKey );
	if( strValue.empty() )
	{
		return defaultValue;
	}

	double dValue;
	sscanf(strValue.c_str(), "%lf", &dValue);
	return dValue;
}

int GConfigFile::get_int_param( const string& strKey, int defaultValue )
{
	string strValue = get_param( strKey );
	if( strValue.empty() )
	{
		return defaultValue;
	}

	return atoi( strValue.c_str() );

}

bool GConfigFile::get_bool_param( const string& strKey, bool defaultValue )
{
	string strValue = get_param( strKey );
	if( strValue.empty() )
	{
		return defaultValue;
	}

	
	return !stricmp( strValue.c_str(), "true" );
}

string GConfigFile::get_param( const string& strKey )
{
	FILE* fp = fopen( m_strFile.c_str(), "r" );
	if( NULL == fp )
	{
		return "";
	}

	char buf[2048] = {0};
	while( !feof(fp) )
	{
		memset(buf, 0, sizeof(buf));
		if( !fgets( buf, sizeof(buf), fp ) )
			break;

		string strValue = parse_line( strKey, buf );
		if( !strValue.empty() )
		{
			fclose(fp);
			return strValue;
		}	
		
	}

	fclose(fp);
	return "";
}

string GConfigFile::parse_line(const string& strKey, char* line)
{
	trim_string(line);
	bool ok = true;
	for( int index = 0; index < strKey.size() ; ++index )
	{
		if( strKey[index] != line[index] )
		{
			ok = false;
			break;
		}
	}
	if(line[index] != '=')
		ok = false;
	if(ok == false)
	{
		return "";
	}
	return line+index+1;
}

